<?php

/**
 * Przeciążony kontroler. Dodano system szablonów Twig i 
 * interfejs ArrayAccess do łatwego definiowania zmiennych szablonowych
 *
 *
 */
class Controller extends Controller_Core implements ArrayAccess
{
	protected $_templateContext = array();

	public function __construct()
	{
		parent::__construct();
		
		$moduleDirs=Kohana::config('config.modules');
		$templateDirs=array(APPPATH .'views');		
		foreach($moduleDirs  as $dir)
		{
			$viewDir= $dir . '/views';
			if (is_dir($viewDir))
			{

				$templateDirs[]=$viewDir;
			}
		}
		// System szablonów Twig	
		$loader = new Twig_Loader_Filesystem($templateDirs);

		$options = array();
		if (IN_PRODUCTION) {
			$options['cache'] = implode(DIRECTORY_SEPARATOR, array(APPPATH, 'cache', 'twig'));
		}
		$this->template_engine = new Twig_Environment($loader, $options);
		$this->template_engine->addExtension(new Twig_Extension_KohanaHelpers());

		// Przypisz użytkownik do kontrolera i do templetow
		$this->user = BasicUser::instance();
		$this['user'] = BasicUser::instance();
	}

	/**
	 * Renderuje szablon Twig
	 * @param string $templateName
	 * @return string
	 */
	protected function render($templateName)
	{
		$template = $this->template_engine->loadTemplate($templateName);

		return $template->render($this->_templateContext);
	}

	// Implementacja interfejsu ArrayAccess. Interfejs
	// tablicowy używany jest jako przechowalnia dla zmiennych do szablonu


	public function offsetExists($offset)
	{
		return array_key_exists($offset, $this->_templateContext);
	}

	public function offsetGet($offset)
	{
		return $this->_templateContext[$offset];
	}

	public function offsetSet($offset, $value)
	{
		return $this->_templateContext[$offset] = $value;
	}

	public function offsetUnset($offset)
	{
		unset($this->_templateContext[$offset]);
	}
}

/**
 * Rozszerzenie do obsługi i18n z kohana 
 *
 */
class Twig_Extension_KohanaHelpers extends Twig_Extension
{
	public function getFilters()
	{
		return array(
			'trans' => new Twig_Filter_Method($this, 'translate'),
			'urlfile' => new Twig_Filter_Method($this, 'urlfile')
		);
	}

	public function urlfile($param)
	{
		return url::file($param);
	}

	public function getName()
	{
		return 'kohanahelpers';
	}

	public function translate($message)
	{
		return Kohana::lang($message);
	}
}